package com.sixonesix.myapplication;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;

import com.sixonesix.myapplication.widget.DrawRelativeLayout;


public class ShowDrawActivity extends AppCompatActivity {
    private DrawRelativeLayout drl_content; // 声明一个绘画布局对象
    private Button btn_center;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_draw);

        // 从布局文件中获取名叫drl_content的绘画布局
        // 通过findViewById方法找到布局文件中id为drl_content的视图组件，并将其赋值给drl_content变量
        drl_content = findViewById(R.id.drl_content);
        // 通过findViewById方法找到布局文件中id为btn_center的视图组件，并将其赋值给btn_center变量
        btn_center = findViewById(R.id.btn_center);
        // 调用initTypeSpinner方法，通常这个方法可能是用于初始化某种类型的Spinner（下拉列表）组件相关的设置，比如设置其数据来源、样式等
        initTypeSpinner();
    }

    // 初始化绘图方式的下拉框
    private void initTypeSpinner() {
        // 创建一个ArrayAdapter对象，用于将数据适配到Spinner上
        // 这里指定了数据类型为String，构造函数参数：
        // this表示当前上下文环境，一般是指当前的Activity或Fragment等
        // R.layout.item_select是用于定义Spinner中每个选项显示样式的布局文件资源ID
        // descArray应该是一个包含了要在Spinner中显示的字符串数据的数组，它作为数据源提供给Adapter
        ArrayAdapter<String> drawAdapter = new ArrayAdapter<String>(this,
                R.layout.item_select, descArray);
        // 通过findViewById方法找到布局文件中id为sp_draw的Spinner组件，并将其赋值给sp_draw变量
        Spinner sp_draw = findViewById(R.id.sp_draw);
        // 为Spinner设置提示信息，当Spinner获取焦点时会显示这条提示，这里提示用户"请选择绘图方式"
        sp_draw.setPrompt("请选择绘图方式");
        // 将之前创建好的ArrayAdapter设置给Spinner，这样Spinner就能根据Adapter中的数据和布局来显示选项内容
        sp_draw.setAdapter(drawAdapter);

        // 为Spinner设置一个监听器，当用户在Spinner中选择了某个项目时，会触发监听器中的回调方法
        // 这里传入的是一个新创建的DrawSelectedListener对象，它应该是实现了OnItemSelectedListener接口的类的实例，用于处理选择事件
        sp_draw.setOnItemSelectedListener(new DrawSelectedListener());
        // 设置Spinner的初始选中项为第0项，即默认选中数组中的第一个元素（索引为0）
        sp_draw.setSelection(0);
    }

    // 定义一个字符串数组descArray，用于存储在Spinner（下拉列表）中显示的各个绘图方式的描述信息
    private String[] descArray = {"不画图", "画矩形", "画圆角矩形", "画圆圈", "画椭圆",
            "onDraw画叉叉", "dispatchDraw画叉叉"};

    // 定义一个整数数组typeArray，数组中的每个元素对应着一种绘图方式的类型标识，与descArray中的描述信息一一对应
    private int[] typeArray = {0, 1, 2, 3, 4, 5, 6};

    // 定义一个内部类DrawSelectedListener，该类实现了OnItemSelectedListener接口，用于处理Spinner中选项被选中时的事件
    class DrawSelectedListener implements OnItemSelectedListener {

        // 当用户在Spinner中选择了某个选项时，会调用此方法
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

            // 根据用户选择的选项在typeArray数组中的索引（arg2）获取对应的绘图类型标识
            int type = typeArray[arg2];
            // 如果选择的绘图类型是5（对应"onDraw画叉叉"）或者6（对应"dispatchDraw画叉叉"）
            if (type == 5 || type == 6) {
                // 将btn_center这个视图组件设置为可见状态，以便在特定绘图类型下显示相关的操作按钮或布局等
                btn_center.setVisibility(View.VISIBLE);
            } else {
                // 对于其他绘图类型，将btn_center设置为不可见状态，隐藏相关操作按钮或布局等
                btn_center.setVisibility(View.GONE);
            }
            // 设置绘图布局的绘制类型
            drl_content.setDrawType(type);
        }
        // 当Spinner中没有任何选项被选中时（例如，用户取消了之前的选择或者Spinner刚初始化还未进行选择操作），会调用此方法
        // 这里暂时为空实现，可能在某些情况下需要根据具体需求添加相应逻辑
        public void onNothingSelected(AdapterView<?> arg0) {}

    }
}